package lab2TecDeProg;

public class Grafo {
	
	private int[][] mat;
	private int numVertices;
	private int[] pos;
	
	public Grafo(int numVertices) {
		
		mat = new int[numVertices][numVertices];
		pos = new int[numVertices];
		this.numVertices = numVertices;
		for(int i = 0; i < numVertices; i++) {
			for(int j = 0; j < numVertices; j++) {
				mat[i][j] = 0;
			}
			pos[i] = -1;
		}
	}
	
	public void insereAresta(int v1, int v2, int peso) {
		mat[v1][v2] = peso;
	}
	
	public boolean existeAresta(int v1, int v2) {
		return (mat[v1][v2] > 0);
	}
	
	public boolean listaAdjVazia(int v) {
		for(int i = 0; i < numVertices; i++ ) {
			if(existeAresta(v, i)) {
				return false;
			}
		}
		return true;
	}
	
	public Aresta primeiroListaAdj(int v) {
		pos[v] = -1;
		return proxAdj(v);
	}
	
	public Aresta proxAdj(int v) {
		pos[v]++;
		while((pos[v] < numVertices) && (mat[v][pos[v]] == 0)) {
			pos[v]++;
		}
		if(pos[v] == numVertices) {
			return null;
		} else {
			return new Aresta(v, pos[v], mat[v][pos[v]]);
		}
	}
	
	public Aresta retiraAresta(int v1, int v2) {
		if(mat[v1][v2] == 0) {
			return null;
		} else {
			Aresta aresta = new Aresta(v1, v2, mat[v1][v2]);
			mat[v1][v2] = 0;
			return aresta;
		}
	}
	
	public void imprime() {
		System.out.print("  ");
		for(int i = 0; i < numVertices; i++) {
			System.out.print(i + " ");
		}
		System.out.println();
		for(int i = 0; i < numVertices; i++) {
			System.out.print(i + " ");
			for(int j = 0; j < numVertices; j++) {
				System.out.print(mat[i][j] + " ");
			}
			System.out.println();
		}
	}
	
	public int numVertices() {
		return numVertices;
	}
	
	public Grafo menorCaminho(int no1, int no2) {
		
		Grafo g = new Grafo(10);
		
		for(int i = 0; i < 9; i++) {
				g.insereAresta(i, i+1, 1);
		}
		return g;
	}
}
